package com.smdp.controller;


import com.smdp.dto.Result;
import com.smdp.entity.Voucher;
import com.smdp.service.IVoucherService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 优惠券前端控制器。
 * 包含商家新增优惠券、商家新增秒杀券、用户查询商家优惠券信息。新增秒杀券时，除了保存普通优惠券信息，还将秒杀券信息保存到数据库，
 * 将秒杀券库存信息保存到Redis，将秒杀券id保存到布隆过滤器，并通过RabbitMQ添加优惠券提醒任务。
 *
 * @author 蔡方珩
 */
@RestController
@RequestMapping("/voucher")
public class VoucherController {

    @Resource
    private IVoucherService voucherService;

    /**
     * 新增普通券。
     * 验证店主身份，如果是店主则新增优惠券。
     * @param voucher 优惠券信息
     * @return 成功：优惠券id / 失败：失败原因
     */
    @PostMapping("/add")
    public Result addVoucher(@RequestBody Voucher voucher) {
        return voucherService.addVoucher(voucher);
    }

    /**
     * 新增秒杀券。
     * 验证店主身份，如果是店主则新增秒杀券。除了保存普通优惠券信息，将秒杀券信息保存到数据库，将秒杀券库存信息保存到Redis，
     * 将秒杀券id保存到布隆过滤器，通过RabbitMQ添加优惠券提醒任务。
     * @param voucher 优惠券信息
     * @return 成功：优惠券id / 失败：失败原因
     */
    @PostMapping("/add/seckill")
    public Result addSeckillVoucher(@RequestBody Voucher voucher) {
        return voucherService.addSeckillVoucher(voucher);
    }

    /**
     * 查询店铺的优惠券列表。
     * @param shopId 店铺id
     * @return 优惠券列表
     */
    @GetMapping("/list/{id}")
    public Result queryVoucherOfShop(@PathVariable("id") Long shopId) {
       return voucherService.queryVoucherOfShop(shopId);
    }
}
